1. Field of the Invention
The present invention relates generally to computer resource management systems and methods, and more particularly to systems and methods that provide dynamic, load-based allocation and provisioning of servers within data centers.
2. Related Art
In today's computing environment, it is common for an entity (e.g., a corporation) to operate a data center to provide a variety of applications and services for its customer end users and internal operations. Such data centers typically include a collection of servers, storage elements (i.e., any device designed and built primarily for the purpose of persistent data storage and delivery), and a communications infrastructure (i.e., a network) that provides physical connections among the data center's elements and a management layer that organizes these connections, storage elements and servers.
Each application or service to be executed within the data center often requires one or more servers provisioned with the correct operating system, middleware, application software, data and configuration information. Currently, provisioning and allocating a server are essentially one task—installing the necessary software onto the hard drive of the server and configuring it for use within the specific application and operating environment.
More specifically, the provisioning process for a traditional server involves installing and configuring software on the server's directly attached storage device or dedicated storage area network (SAN) device. This is a time consuming, mostly manual operation that can take days to complete and fully verify for a large, complex application. It is also a destructive process that requires irreversible changes to the server's disk drive such that any previous installation will be overwritten. If the new installation fails, there may be no easy way to recover the previous working system. The time, effort, expense and risk associated with provisioning servers make it infeasible to re-provision a server to meet short-term requirements. Thus, in practice, each server typically is statically allocated to a specific application.
Several commercial tools have been introduced that streamline this process when installing a large number of servers. These tools employ “push provisioning” to copy a system image over the network to the local hard drive of each server. This approach is useful in maintaining a common system image across a server pool, but does not facilitate rapid re-provisioning of servers because it consumes significant network bandwidth and is destructive of previous installations. Re-provisioning a single server can fully saturate a 100 Mbps local area network (LAN) for several minutes. Re-provisioning a pool of servers can take several hours.
As mentioned above, because of the time, effort, expense and risk associated with provisioning servers, each server in the data center typically is statically allocated to a specific application. Consequently, long-term capacity projections are used to plan server capacity in advance of need to ensure that the data center has sufficient number of servers to meet the peak capacity requirements for each application. Most of the time, however, an application does not experience peak demand and its servers run well below their capacity. This wastes power and physical (i.e., rack) space, as well as increases administrative burden.
Therefore, given the above, what is needed is a system, method, and computer program product for dynamic server allocation and provisioning. The system, method, and computer program product should divide the server provisioning and allocation into two separate tasks. Provisioning a server should be accomplished by generating a fully configured, bootable system image (root file system, kernel, applications, data, etc.), complete with network address assignments, virtual LAN (VLAN) configuration, load balancing configuration, and the like. The system images should be stored in a storage repository such that they are accessible to more than one server. The allocation process should be accomplished using a switching mechanism that can match each server with an appropriate system image based upon the current configuration or requirements of the data center. Thus, the system, method, and computer program product should be able to provide real-time provisioning and allocation of servers in the form of automated responses to changing conditions within the data center.